#include <iostream>
/*
    成员函数做友元
*/

class Home;

class GoodFriend
{
public:
    Home *home;
    void visit_home();
};

class Home
{

    friend void GoodFriend::visit_home();

private:
    std::string bed_room = "卧室";

public:
    std::string living_room = "客厅";
};

void GoodFriend::visit_home() // 这个函数中使用了home 中的属性，必须要求home是完整的定义才行，如果将这个函数放在home类的前面的话，就不能访问其中的属性了
{
    std::cout << home->living_room << std::endl;
    std::cout << home->bed_room << std::endl; // 在Home 类中声明了GoodFriend 中的友元成员函数，就可以访问其私有成员了。友元就是可以访问私有成员的
}

int main(int argc, char const *argv[])
{
    Home *home = new Home();

    // visit_home(&home);
    GoodFriend *goodFriend = new GoodFriend();

    goodFriend->home = home;

    goodFriend->visit_home();

    return 0;
}
